package com.caesi.tacacaesifinal.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.caesi.tacacaesifinal.model.Campeonato;

public class CampeonatoDAO {

    private final int ID = 0;

    private final int NOME = 1;

    private final int DATA_INICIAL = 2;

    private final int DATA_FINAL = 3;

    private final int LOCAL = 4;

    private final int ORGANIZACAO = 5;

    private final int DESCRICAO = 6;

    public static final String TABELA_CAMPEONATO = "campeonato";

    public static String scriptCreateCampeonato = "CREATE TABLE IF NOT EXISTS "
            + TABELA_CAMPEONATO
            + " (id INTEGER PRIMARY KEY, nome TEXT, dataInicial TEXT,dataFinal TEXT,local TEXT,organizacao TEXT,descricao TEXT)";

    public static String scriptDeleteCampeonato = "DROP TABLE IF EXISTS "
            + TABELA_CAMPEONATO;

    private final String[] COLUNAS = { "id", "nome", "dataInicial",
            "dataFinal", "local", "organizacao", "descricao" };

    private Context context;

    private SQLiteDatabase bancoDeDadosCampeonato;

    private static CampeonatoDAO repositorioCampeonato = null;
    private SQLiteHelper sqpliteHelper;

    private CampeonatoDAO(Context context) {
        this.context = context;
        sqpliteHelper = new SQLiteHelper(this.context);
        this.bancoDeDadosCampeonato = sqpliteHelper.getWritableDatabase();
    }

    public static synchronized CampeonatoDAO getRepositorio(Context context) {
        if (repositorioCampeonato == null) {
            repositorioCampeonato = new CampeonatoDAO(context);
        }
        return repositorioCampeonato;
    }

    public void insert(Campeonato camp) {
        ContentValues cv = new ContentValues();

        cv.put("nome", camp.getNome());

        cv.put("dataInicial", camp.getDataInicial());

        cv.put("dataFinal", camp.getDataFinal());

        cv.put("local", camp.getLocal());

        cv.put("organizacao", camp.getOrganizacao());

        cv.put("descricao", camp.getDescricao());

        bancoDeDadosCampeonato.insert(TABELA_CAMPEONATO, null, cv);

    }

    public boolean deleteCampeonato(String codigo) {
        this.sqpliteHelper.getEquipeDAO().deleteDoCamponato(
                Long.valueOf(codigo));
        return (this.bancoDeDadosCampeonato.delete(TABELA_CAMPEONATO, "id='"
                + codigo + "'", null)) > 0;
    }

    public Campeonato getCampeonato(String codigo) {

        Cursor cursor = bancoDeDadosCampeonato.query(TABELA_CAMPEONATO,
                COLUNAS, null, null, null, null, null);

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {

            if (cursor.getString(ID).equals(codigo)) {
                Campeonato camp = criarCampeonato(cursor);
                cursor.close();
                return camp;
            }
            cursor.moveToNext();
        }
        cursor.close();
        return null;
    }

    public List<Campeonato> getTodosOsCampeonatos() {
        List<Campeonato> lista = new ArrayList<Campeonato>();
        Cursor cursor = bancoDeDadosCampeonato.query(TABELA_CAMPEONATO,
                COLUNAS, null, null, null, null, null);

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            Campeonato camp = criarCampeonato(cursor);
            lista.add(camp);
            cursor.moveToNext();
        }
        cursor.close();
        return lista;
    }

    public void updateCampeonato(Campeonato camp) {
        try {
            ContentValues cv = new ContentValues();

            cv.put("nome", camp.getNome());

            cv.put("dataInicial", camp.getDataInicial());

            cv.put("dataFinal", camp.getDataFinal());

            cv.put("local", camp.getLocal());

            cv.put("organizacao", camp.getOrganizacao());

            cv.put("descricao", camp.getDescricao());
            bancoDeDadosCampeonato.update(TABELA_CAMPEONATO, cv,
                    "id = " + camp.getId(), null);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private Campeonato criarCampeonato(Cursor cursor) {
        Campeonato camp = new Campeonato();

        camp.setId(cursor.getString(ID));

        camp.setNome(cursor.getString(NOME));

        camp.setDataInicial(cursor.getString(DATA_INICIAL));

        camp.setDataFinal(cursor.getString(DATA_FINAL));

        camp.setDescricao(cursor.getString(DESCRICAO));

        camp.setLocal(cursor.getString(LOCAL));

        camp.setOrganizacao(cursor.getString(ORGANIZACAO));

        return camp;
    }

}